/**
 * 轮播图相关API服务
 */

import { get } from './request.js'

/**
 * 获取轮播图列表
 * @param {Object} params 查询参数
 * @param {boolean} params.active 是否只获取激活的轮播图，默认true
 * @returns {Promise} 返回轮播图列表
 */
export function getBannerList(params = { active: true }) {
  return get('/v1/banner/list', params, {
    showLoading: false // 不显示loading，在页面中自己控制
  })
}

/**
 * 获取轮播图详情
 * @param {number} id 轮播图ID
 * @returns {Promise} 返回轮播图详情
 */
export function getBannerDetail(id) {
  return get(`/v1/banner/${id}`)
}

/**
 * 处理轮播图点击事件
 * @param {Object} banner 轮播图对象
 */
export function handleBannerClick(banner) {
  if (!banner || !banner.linkUrl || banner.linkType === 'none') {
    return
  }

  switch (banner.linkType) {
    case 'internal':
      // 内部页面跳转
      if (banner.linkUrl.startsWith('/')) {
        uni.navigateTo({
          url: banner.linkUrl,
          fail: (error) => {
            console.error('页面跳转失败:', error)
            uni.showToast({
              title: '页面跳转失败',
              icon: 'none'
            })
          }
        })
      }
      break
      
    case 'external':
      // 外部链接 - 复制到剪贴板
      uni.setClipboardData({
        data: banner.linkUrl,
        success: () => {
          uni.showToast({
            title: '链接已复制',
            icon: 'success'
          })
        },
        fail: () => {
          uni.showToast({
            title: '无法打开外部链接',
            icon: 'none'
          })
        }
      })
      break
      
    default:
      console.warn('未知的链接类型:', banner.linkType)
      break
  }
}

/**
 * 转换API返回的轮播图数据格式为小程序需要的格式
 * @param {Array} banners API返回的轮播图数组
 * @returns {Array} 转换后的轮播图数组
 */
export function transformBannerData(banners) {
  if (!Array.isArray(banners)) {
    return []
  }

  return banners.map(banner => ({
    id: banner.id,
    title: banner.title,
    description: banner.description,
    backgroundImage: transformImageUrl(banner.imageUrl),
    linkUrl: banner.linkUrl,
    linkType: banner.linkType,
    sortOrder: banner.sortOrder,
    // 保留原始数据，以备后用
    _original: banner
  }))
}

/**
 * 转换图片URL
 * @param {string} imageUrl 图片URL
 * @returns {string} 转换后的图片URL
 */
function transformImageUrl(imageUrl) {
  if (!imageUrl) {
    return 'static/images/logo.png'
  }
  
  // 如果是完整的URL，直接返回
  if (imageUrl.startsWith('http')) {
    return imageUrl
  }
  
  // 如果是服务器上传的图片路径（uploads目录），需要加上服务器地址
  if (imageUrl.startsWith('/uploads/')) {
    const { BASE_URL } = require('../utils/config.js')
    return BASE_URL + imageUrl
  }
  
  // 如果是服务器静态文件路径，需要加上服务器地址
  if (imageUrl.startsWith('/static/')) {
    const { BASE_URL } = require('../utils/config.js')
    return BASE_URL + imageUrl
  }
  
  // 如果是本地静态资源相对路径（如 static/images/xxx.jpg），直接返回
  if (imageUrl.startsWith('static/')) {
    return imageUrl
  }
  
  // 其他绝对路径，加上服务器地址
  if (imageUrl.startsWith('/')) {
    const { BASE_URL } = require('../utils/config.js')
    return BASE_URL + imageUrl
  }
  
  // 其他情况直接返回
  return imageUrl
}

/**
 * 预加载轮播图图片
 * @param {Array} banners 轮播图数组
 */
export function preloadBannerImages(banners) {
  if (!Array.isArray(banners)) {
    return
  }

  // 小程序环境下简化预加载处理
  // 小程序本身有图片缓存机制，无需额外预加载
  console.log('轮播图数据准备完成，共', banners.length, '张图片')
}

// 默认轮播图数据（作为fallback）
export const DEFAULT_BANNERS = [
  {
    id: 1,
    title: '医疗数字孪生系统',
    description: '智能化医疗管理平台',
    backgroundImage: '/static/images/biao.png',
    linkUrl: '/pages/services/index',
    linkType: 'internal',
    sortOrder: 1
  },
  {
    id: 2,
    title: '在线问诊服务',
    description: '24小时在线医生咨询',
    backgroundImage: '/static/images/liao.jpeg',
    linkUrl: '/pages/health/index',
    linkType: 'internal',
    sortOrder: 2
  },
  {
    id: 3,
    title: '健康体检预约',
    description: '便民体检服务预约',
    backgroundImage: '/static/images/yi.jpg',
    linkUrl: '/pages/appointment/index',
    linkType: 'internal',
    sortOrder: 3
  }
]

export default {
  getBannerList,
  getBannerDetail,
  handleBannerClick,
  transformBannerData,
  preloadBannerImages,
  DEFAULT_BANNERS
}